#include <stdio.h>
#include <string.h>
#include "TSintactico.h"
#include "TLexico.h"

typedef struct _tParser {
	TSintactico as;
	TLexico al;
	char error; /*identifica de donde provino el error*/
} TParser;

/*///////////////Funciones Primitivas/////////////////////*/

int TParser_Crear(TParser* p) {
	TLexico_Crear(&(p->al));
	TSintactico_Crear(&(p->as));
	TLexico_setAnalizadorSintactico(&(p->al), &(p->as));
	p->error = '0';
	return 0;
}

int TParser_PushChar(TParser* p, char c) {
	int aux;

	aux = TLexico_PushChar(&(p->al), c);
	if (aux)
		p->error = aux;
	return aux;;
}

int TParser_terminarFlujo(TParser* p) {
	TLexico_terminarFlujo(&(p->al));
	TSintactico_terminarFlujo(&(p->as));
	return 0;
}

int TParser_Destruir(TParser* p) {
	TLexico_Destruir(&(p->al));
	TSintactico_Destruir(&(p->as));
	return 0;
}

int TParser_getUltimoError(TParser* p, int* codigo, char* mensaje) {

	if (p->error == 'l') {
		TLexico_getUltimoError(&(p->al), codigo, mensaje);
	} else if (p->error == 's') { /*podria obviarse la condicion del else puesto que unicamente*/
		TSintactico_getUltimoError(&(p->as), codigo, mensaje);/* pueden existir errores o lexicos o sintacticos*/
	}
	return 0;
}

